<?php

App::uses('AppController', 'Controller');

/**
 * Consultasexternas Controller
 *
 * @property Consultasexterna $Consultasexterna
 */
class ConsultasexternasController extends AppController
{

    public $layout = 'hospital';
    public $uses = array('Consultasexterna', 'AlertasPaciente', 'User', 'Trauma', 'ExcomplementariosPaciente', 'Paciente', 'PacientesSeguro');
    public $helpers = array('Fechas');
    public $components = array('Fechasconvert');

    public function beforeFilter()
    {
        parent::beforeFilter();
        //$this->Auth->allow();
    }

    public function buscarpaciente()
    {
        if (!empty($this->request->data))
        {
            //debug($this->request->data);
            //exit;
        }
    }

    public function antecedentes($idpaciente = null)
    {
        $datos = $this->Consultasexterna->find('all', array('conditions' => array('Consultasexterna.paciente_id' => $idpaciente)));
        //debug($datos);exit;
        $this->set(compact('datos'));
    }

    public function sacarficha($idpaciente = NULL)
    {
        $ficha = $this->Paciente->find('first', array('conditions' => array('Paciente.id' => $idpaciente)));
        $dcm = $this->User->find('all', array(
            'recursive' => 0,
            'conditions' => array('User.group_id' => 2)
        ));
        $triages = $this->Trauma->find('all', array(
            'recursive' => -1,
        ));
        $medicos = $this->User->find('all', array(
            'conditions' => array('User.group_id' => 2)
        ));

        $this->set(compact('medicos', 'idpaciente', 'dcm', 'triages', 'ficha'));
    }

    public function guardaconsulta()
    {
        $fecha = date('Y-m-d');
        $hora = date('H:i:s');
        $this->request->data['Consultasexterna']['fecha'] = $fecha;
        $this->request->data['Consultasexterna']['hora'] = $hora;
        $this->request->data['Consultasexterna']['estadoatencion'] = 'N';

        //debug($this->request->data);exit;
        $datosPaciente = $this->Paciente->find('first', array(
            'recursive'=>-1,
            'conditions'=>array('Paciente.id'=>$this->request->data['Consultasexterna']['paciente_id'])
        ));
        
        //debug($datosPaciente);

        $datosseguro = $this->PacientesSeguro->find('first', array(
            'conditions' => array(
                'PacientesSeguro.paciente_id' => $this->request->data['Consultasexterna']['paciente_id']),
            'order' => 'PacientesSeguro.id DESC'
        ));

        $fechaEdad = $datosPaciente['Paciente']['fecha_nacimiento'];
        $edad = $this->Fechasconvert->calculaEdad($fechaEdad);
        //debug($fechaEdad);
        //debug($edad);die;
        
        $this->request->data['Consultasexterna']['edad'] = $edad;
        $this->request->data['Consultasexterna']['seguro_id'] = $datosseguro['PacientesSeguro']['seguro_id'];
        $this->request->data['Consultasexterna']['colegio_id'] = $datosseguro['PacientesSeguro']['colegio_id'];
        $this->request->data['Consultasexterna']['curso'] = $datosseguro['PacientesSeguro']['curso'];

        if ($this->request->data['Consultasexterna']['trauma_id'] == 22)
        {
            $consultaultima = $this->Consultasexterna->find(
                    'first', array('conditions' => array(
                    'Consultasexterna.trauma_id' => 22,
                    'Consultasexterna.fecha' => date('Y-m-d')),
                'order' => array('Consultasexterna.id DESC'),
                'recursive' => -1
            ));
            //debug($consultaultima);exit;
        } else
        {
            $consultaultima = $this->Consultasexterna->find(
                    'first', array('conditions' => array(
                    'Consultasexterna.trauma_id !=' => 22,
                    'Consultasexterna.fecha' => date('Y-m-d')),
                'order' => array('Consultasexterna.id DESC'),
                'recursive' => -1
            ));
        }
        //debug($consultaultima);exit;
        if (!empty($consultaultima))
        {
            $numero = $consultaultima['Consultasexterna']['number'] + 1;
        } else
        {
            $numero = 1;
        }

        $this->request->data['Consultasexterna']['number'] = $numero;
        //debug($this->request->data['Consultasexterna']);exit;
        $this->Consultasexterna->create();
        if ($this->Consultasexterna->save($this->request->data))
        {
            $id = $this->Consultasexterna->getLastInsertID();

            $this->Session->setFlash('Registro Correctamente', 'bueno');
            if ($this->request->data['Consultasexterna']['trauma_id'] == 22)
                $this->redirect(array('controller' => 'Pacientes', 'action' => 'sololaboratorios', $id, 'txt_motivo'));
            else
                $this->redirect(array('controller' => 'Pacientes', 'action' => 'signosvitales', $id));
        }
    }

    public function guardaconsultadoctor()
    {
        if (!empty($this->request->data))
        {
            //debug($this->request->data);exit;
            $idUsuario = $this->Session->read('Auth.User.id');
            $fecha = date('Y-m-d');
            $hora = date('H:i:s');
            $this->request->data['Consultasexterna']['medico_id'] = $idUsuario;
            $this->request->data['Consultasexterna']['fecha'] = $fecha;
            $this->request->data['Consultasexterna']['hora'] = $hora;
            $data = $this->request->data['Consultasexterna'];

            $estado = $this->Consultasexterna->find('first', array(
                'conditions' => array('Consultasexterna.id' => $data['id']),
                'fields' => array('Consultasexterna.estadoatencion')
            ));
            if ($estado['Consultasexterna']['estadoatencion'] == 'F')
            {
                $this->Session->setFlash('Ud no puede modificar ningun parametro, la ficha fue cerrada', 'error');
                $this->redirect(array('controller' => 'Pacientes', 'action' => 'verestadopacienteimprime', $data['id']));
            }
            if (!empty($this->request->data['ExcomplementariosPaciente']))
            {
                //debug($this->request->data);exit;
                $this->Consultasexterna->saveAll($data);
                $this->ExcomplementariosPaciente->deleteAll(array('ExcomplementariosPaciente.consultasexterna_id' => $data['id']));
                $datosexamenes = $this->request->data['ExcomplementariosPaciente'];
                //debug($datosexamenes);exit;
                foreach ($datosexamenes as $examen)
                {
                    $this->request->data = '';
                    $this->request->data['ExcomplementariosPaciente']['user_id'] = $idUsuario;
                    $this->request->data['ExcomplementariosPaciente']['paciente_id'] = $data['paciente_id'];
                    $this->request->data['ExcomplementariosPaciente']['consultasexterna_id'] = $data['id'];
                    $this->request->data['ExcomplementariosPaciente']['excomplementario_id'] = $examen['excomplementario_id'];
                    $this->request->data['ExcomplementariosPaciente']['observaciones'] = $examen['observaciones'];
                    $this->ExcomplementariosPaciente->create();
                    if (!($this->ExcomplementariosPaciente->save($this->request->data['ExcomplementariosPaciente'])))
                    {
                        $this->Session->setFlash('Error en el registro de solicitud de examenes complementarios, registre nuevamente los examenes complementarios', 'error');
                        $this->ExcomplementariosPaciente->deleteAll(array('ExcomplementariosPaciente.consultasexterna_id' => $data['id']));
                        $this->redirect(array('controller' => 'Pacientes', 'action' => 'verestadopaciente', $data['id'], 'solicitalaboratorio'));
                    }
                }
                $this->Session->setFlash('Se registraron los  examenes complementarios', 'bueno');

                if (!empty($data['diagnostico']))
                {
                    $dato = 'txt_diagnostico';
                } else
                {
                    $dato = 'ex_comp';
                }

                $this->redirect(array('controller' => 'Pacientes', 'action' => 'verestadopaciente', $data['id'], $dato));
            } else
            {
                if ($this->Consultasexterna->save($data))
                {
                    if (!empty($data['diagnostico']))
                    {
                        $dato = 'txt_diagnostico';
                    }
                    else
                        $dato = 'txt_examen';

                    $this->redirect(array('controller' => 'Pacientes', 'action' => 'verestadopaciente', $data['id'], $dato));
                }
            }
        }
    }

    public function listadopacientes()
    {
        $fecha_actual = date('Y-m-d');

        $pacientes = $this->Consultasexterna->find('all', array(
            'conditions' => array(
                'Consultasexterna.fecha' => $fecha_actual,
                'Consultasexterna.estadoatencion !=' => 'E',
                'Consultasexterna.trauma_id !=' => 22
            ),
            'recursive' => 1
        ));
        //debug($pacientes);exit;
        $this->set(compact('pacientes'));
    }

    public function consultaspasadas()
    {
        $fecha = date('Y-m-d');
        $pacientes = $this->Consultasexterna->find('all', array(
            'conditions' => array('Consultasexterna.fecha NOT LIKE' => $fecha),
            'order' => array('Consultasexterna.id DESC', 'Consultasexterna.created DESC', 'Consultasexterna.number ASC', 'Consultasexterna.created DESC'),
            'recursive' => 1,
            'limit' => 100
        ));

        $this->set(compact('pacientes'));
    }

    public function solicitudeslaboratorios()
    {
        $fecha_actual = date('Y-m-d');

        $pacientes = $this->Consultasexterna->find('all', array(
            'conditions' => array(
                'Consultasexterna.fecha' => $fecha_actual,
                'Consultasexterna.estadoatencion !=' => 'E',
                'Consultasexterna.trauma_id' => 22
            ),
            'recursive' => 1
        ));
        //debug($pacientes);exit;
        $this->set(compact('pacientes'));
    }

    public function formconsultasanteriores()
    {
        
    }

    public function mispacientes()
    {
        $rol = $this->Session->read('Auth.User.Group.id');
        $userId = $this->Session->read('Auth.User.id');
        $fecha_actual = date('Y-m-d');
        //debug($rol);exit;
        switch ($rol)
        {
            case 1://adminsitrado4
                $pacientes = $this->Consultasexterna->find('all', array(
                    'conditions' => array('Consultasexterna.fecha' => $fecha_actual),
                    'recursive' => 1
                ));
                break;
            case 2://Medico
                $pacientes = $this->Consultasexterna->find('all', array(
                    'recursive' => 1,
                    'conditions' => array(
                        'Consultasexterna.medico_id' => $userId,
                        'Consultasexterna.fecha' => $fecha_actual,
                        'Consultasexterna.trauma_id !=' => 22
//                        'OR' => array('Consultasexterna.estadoatencion !=' u=> 'F')
                    )
                ));
                break;
            case 3://Enfermera
                $pacientes = $this->Consultasexterna->find('all', array(
                    'conditions' => array('Consultasexterna.fecha' => $fecha_actual, 'Consultasexterna.trauma_id !=' => 22),
                    'recursive' => 1
                ));
                break;
            case 5:
                $pacientes = $this->Consultasexterna->find('all', array(
                    'recursive' => 1,
                    'conditions' => array(
                        'Consultasexterna.fecha' => $fecha_actual,
                        'Consultasexterna.estadoatencion' => array('L', 'M', 'C', 'R')
                    )
                ));
                break;
            default:
                echo "No tienes permisos para esto";
                break;
        }

        $this->set(compact('pacientes'));
    }

    public function ajaxtransferirpaciente($idConsulta)
    {
        $this->layout = 'ajax';
        //debug($idConsulta);exit();
        if (!empty($this->request->data))
        {
            $data = $this->request->data;
            //debug($this->request->data);exit;
            $this->Consultasexterna->save($data);
            $this->Session->setFlash('Se traspaso el paciente correctamente');
            $this->redirect(array('action' => 'listadopacientes'));
        } else
        {
            $medicos = $this->User->find('all', array('conditions' => array('User.group_id' => array('2', '6'))));
            //debug($medicos);exit();
            $this->set(compact('medicos', 'idConsulta'));
        }
    }

    public function fichaconsulta($idConsulta = NULL)
    {
        $datosconsulta = $this->Consultasexterna->find('first', array('conditions' => array('Consultasexterna.id' => $idConsulta)));
        //debug($datosconsulta);exit;
        $this->set(compact('idConsulta', 'datosconsulta'));
    }

    public function ajaxcambiaconducta()
    {
        $this->layout = 'ajax';
        $idConsulta = $this->request->data['cambiaConducta']['consulta'];

        //debug($datosFicha);        
        $conducta = $this->request->data['cambiaConducta']['recomendaciones'];
        $data = array('id' => $idConsulta, 'recomendaciones' => $conducta);
        $this->Consultasexterna->save($data);
        //debug($idConsulta);
        //datos para el log
        $datosFicha = $this->Consultasexterna->find('first', array(
            'recursive' => 0,
            'conditions' => array('Consultasexterna.id' => $idConsulta)
        ));
        $nombreMedico = $this->Session->read('Auth.User.nombre') . ' ' . $this->Session->read('Auth.User.apellido_paterno') . ' ' . $this->Session->read('Auth.User.apellido_materno');
        $numeroFicha = $datosFicha['Consultasexterna']['number'];
        $nombrePaciente = $datosFicha['Paciente']['nombres'] . ' ' . $datosFicha['Paciente']['ap_paterno'] . ' ' . $datosFicha['Paciente']['ap_materno'];

        CakeLog::warning("Cambio Ficha: $numeroFicha \t\t Paciente: $nombrePaciente \t\t Doctor: $nombreMedico \t\t Conducta: $conducta", 'cambio');
    }

    public function ajaxeditamotivo()
    {
        $this->layout = 'ajax';
        $idConsulta = $this->request->data['cambiaMotivo']['consulta'];

        //debug($datosFicha);        
        $motivo = $this->request->data['cambiaMotivo']['motivoconsulta'];
        $data = array('id' => $idConsulta, 'motivoconsulta' => $motivo);
        $this->Consultasexterna->save($data);
        //debug($idConsulta);
        //datos para el log
        $datosFicha = $this->Consultasexterna->find('first', array(
            'recursive' => 0,
            'conditions' => array('Consultasexterna.id' => $idConsulta)
        ));
        $nombreMedico = $this->Session->read('Auth.User.nombre') . ' ' . $this->Session->read('Auth.User.apellido_paterno') . ' ' . $this->Session->read('Auth.User.apellido_materno');
        $numeroFicha = $datosFicha['Consultasexterna']['number'];
        $nombrePaciente = $datosFicha['Paciente']['nombres'] . ' ' . $datosFicha['Paciente']['ap_paterno'] . ' ' . $datosFicha['Paciente']['ap_materno'];

        CakeLog::warning("Cambio Ficha: $numeroFicha \t\t Paciente: $nombrePaciente \t\t Doctor: $nombreMedico \t\t Motivo de Consulta: $motivo", 'cambio');
        //if()
        //debug($this->request->data);
    }

    public function ajaxeditaexfisico()
    {
        $this->layout = 'ajax';
        $idConsulta = $this->request->data['cambiaExFisico']['consulta'];
        $exfisico = $this->request->data['cambiaExFisico']['exfisico'];
        $data = array('id' => $idConsulta, 'examenfisico' => $exfisico);
        //debug($idConsulta);
        $this->Consultasexterna->save($data);

        //datos para el log
        $datosFicha = $this->Consultasexterna->find('first', array(
            'recursive' => 0,
            'conditions' => array('Consultasexterna.id' => $idConsulta)
        ));
        $nombreMedico = $this->Session->read('Auth.User.nombre') . ' ' . $this->Session->read('Auth.User.apellido_paterno') . ' ' . $this->Session->read('Auth.User.apellido_materno');
        $numeroFicha = $datosFicha['Consultasexterna']['number'];
        $nombrePaciente = $datosFicha['Paciente']['nombres'] . ' ' . $datosFicha['Paciente']['ap_paterno'] . ' ' . $datosFicha['Paciente']['ap_materno'];

        CakeLog::warning("Cambio Ficha: $numeroFicha \t\t Paciente: $nombrePaciente \t\t Doctor: $nombreMedico \t\t Examen Fisico: $exfisico", 'cambio');
        //if()
        //debug($this->request->data);
    }

    public function ajaxeditadiagnosticodiferencial()
    {
        $this->layout = 'ajax';
        debug($this->request->data);
        $idConsulta = $this->request->data['cambiaDiagnosticoDif']['consulta'];
        $diagnostico = $this->request->data['cambiaDiagnosticoDif']['diagnostico'];
        $data = array('id' => $idConsulta, 'diagnostico' => $diagnostico);
        //debug($idConsulta);
        $this->Consultasexterna->save($data);
        //if()
        //debug($this->request->data);
    }

    public function darbajaficha($idFicha = null)
    {
        $numeroFicha = $this->Consultasexterna->find('first', array(
            'recursive' => -1,
            'conditions' => array('Consultasexterna.id' => $idFicha)
        ));
        if (!empty($this->request->data))
        {
            //debug($this->request->data);die;
            $idFicha = $this->request->data['Consultasexterna']['idFicha'];
            $observaciones = $this->request->data['Consultasexterna']['observaciones'];
            $this->Consultasexterna->id = $idFicha;
            $this->Consultasexterna->set(array(
                'estadoatencion' => 'E',
                'observaciones' => $observaciones
            ));
            if ($this->Consultasexterna->save())
            {
                $this->Session->setFlash("LA FICHA FUE ELIMINADA", 'bueno');
                $this->redirect(array('controller' => 'Consultasexternas', 'action' => 'listadopacientes'));
            }
        }

        $this->set(compact('numeroFicha'));
    }

}
